package com.taotao.order.service.impl;

import java.util.Date;
import java.util.List;

import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;

import com.taotao.mapper.TbOrderItemMapper;
import com.taotao.mapper.TbOrderMapper;
import com.taotao.mapper.TbOrderShippingMapper;
import com.taotao.order.component.impl.JedisSingleImpl;
import com.taotao.order.pojo.OrderInfo;
import com.taotao.order.service.OrderService;
import com.taotao.po.TbOrderItem;
import com.taotao.po.TbOrderShipping;
import com.taotao.pojo.TaotaoResult;

/**
 * 订单 Service层
 * 
 * @author DaiRui
 * @ClassName : OrderServiceImpl
 * @Description:
 * @date 2017年4月18日 下午12:21:22
 * @Version 1.0
 */
@Service
public class OrderServiceImpl implements OrderService {

	@Autowired
	private TbOrderMapper orderMapper;

	@Autowired
	private TbOrderItemMapper orderItemMapper;

	@Autowired
	private TbOrderShippingMapper orderShippingMapper;

	@Autowired
	private JedisSingleImpl jedisSingle;

	@Value("${REDIS_ORDER_GEN_KEY}")
	private String REDIS_ORDER_GEN_KEY; // 订单ID的key

	@Value("${ORDER_ID_BEGIN}")
	private String ORDER_ID_BEGIN; // 订单号初始值

	@Value("${REDIS_ORDER_DETAIL_GEN_KEY}")
	private String REDIS_ORDER_DETAIL_GEN_KEY;

	@Override
	public TaotaoResult createOrder(OrderInfo orderInfo) {
		// 一、插入订单表
		// 1、接收数据OrderInfo
		// 2、生成订单号
		// 取订单号
		// 判断是否是第一次创建redis中 如果订单号生成key不存在设置初始值
		if (StringUtils.isBlank(jedisSingle.get(REDIS_ORDER_GEN_KEY))) {
			// 设置初始值
			jedisSingle.set(REDIS_ORDER_GEN_KEY, ORDER_ID_BEGIN);
		}
		// 使用jedis的increase 加一 因为是单线程的 使用不会重复
		Long orderId = jedisSingle.incr(REDIS_ORDER_GEN_KEY);
		// 补全字段
		orderInfo.setOrderId(orderId.toString());
		// 状态：1、未付款，2、已付款，3、未发货，4、已发货，5、交易成功，6、交易关闭
		orderInfo.setStatus(1);
		Date date = new Date();
		orderInfo.setCreateTime(date);
		orderInfo.setUpdateTime(date);
		// 4、插入订单表 子类
		orderMapper.insert(orderInfo);
		// 生成订单明细ID

		List<TbOrderItem> orderItems = orderInfo.getOrderItems();
		for (TbOrderItem OrderItem : orderItems) {
			Long orderItemId = jedisSingle.incr(REDIS_ORDER_DETAIL_GEN_KEY);
			OrderItem.setId(orderItemId.toString());
			// 订单号
			OrderItem.setOrderId(orderId.toString());
			// 3、插入数据
			orderItemMapper.insert(OrderItem);

		}
		// 三、插入物流表
		TbOrderShipping orderShipping = orderInfo.getOrderShipping();
		// 1、补全字段
		orderShipping.setOrderId(orderId.toString());
		orderShipping.setCreated(date);
		orderShipping.setUpdated(date);
		// 2、插入数据
		orderShippingMapper.insert(orderShipping);
		// 返回TaotaoResult包装订单号。
		return TaotaoResult.ok(orderId);

	}

}
